// 要求：
// 服务器监听在本地的8080端口。
// 将静态文件放在一个名为public的目录中。
// 如果请求的文件是HTML文件，返回Content-Type为text/html；如果是CSS文件，返回Content-Type为text/css；如果是JavaScript文件，返回Content-Type为application/javascript。
// 如果请求的文件不存在，返回404状态码和“文件未找到”的提示信息。

// 导入模块
import fs from "fs";
import http from "http";

// 创建函数
function fn(req, res) {
  // 当前请求的路径
  let path = "." + req.url;

  // 去掉没用的路径
  path = path.replace("./favicon.ico", "");

  // 编码
  const char = "charset=utf8";

  // 是否存在文件（true / false）
  const fileExist = fs.existsSync(path);

  // 获取当前路径
  if (fileExist) {
    // 获取文件的后缀
    const fileType = path.substring(path.lastIndexOf("."));

    // 判断文件后缀
    switch (fileType) {
      // 是 html 文件时
      case ".html":
        res.writeHead(200, { "Content-Type": `text/html;${char}` });
        break;

      // 是 css 文件时
      case ".css":
        res.writeHead(200, { "Content-Type": `text/css;${char}` });
        break;

      // 是 js 文件时
      case ".js":
        res.writeHead(200, {
          "Content-Type": `application/javascript;${char}`,
        });
        break;
    }

    // 打开并读取文件
    fs.readFile(`${path}`, "utf8", function (err, data) {
      if (err) {
        console.log(err);
      } else {
        // 返回读取的内容
        res.end(data);
      }
    });
  } else {
    // 返回 404 状态码 和 文件未找到 的提示信息
    res.writeHead(404, { "Content-Type": `text/html;${char}` });
    // 返回
    res.end("文件未找到");
  }
}

// 服务器初始化
const server = http.createServer(fn);

// 监听本地端口
server.listen(8080);
